package old.gjp.view;

import old.gjp.controller.ZhangWuController;
import old.gjp.domain.ZhangWu;

import java.util.List;
import java.util.Scanner;

/**
 * @author DingZhenYun
 * @create 2019-03-22 10:56
 */
/*
 *  试图层,用户看到和操作的界面
 *  数据传递给controller层实现
 *  成员位置,创建controller对象
 */
public class MainView {
    private ZhangWuController zhangWuController=new ZhangWuController();

    public MainView() throws Exception {
    }

    public void run(){
        Scanner sc=new Scanner(System.in);
        while(true){
            System.out.println("---------------管家婆家庭记账软件---------------");
            System.out.println("1.添加账务　2.编辑账务　3.删除账务　4.查询账务　5.退出系统");
            System.out.println("请输入要操作的功能序号[1-5]:");
            //接收用户的菜单选择
            int choose = sc.nextInt();
            //对选择的菜单判断,调用不同的功能
            switch(choose){
                case 1:
                    // 选择添加账务,调用添加账务的方法
                    addZhangWu();
                    break;
                case 2:
                    // 选择的编辑账务,调用编辑账务方法
                    editZhangWu();
                    break;
                case 3:
                    // 选择的删除账务,调用删除账务方法
                    deleteZhangWu();
                    break;
                case 4:
                    // 选择的是查询账务,调用查询方法
                    selectZhangWu();
                    break;
                case 5:
                    System.exit(0);
                    break;
                default:
                    System.out.println("你输入有误");
            }
        }
    }
    /*
     * 定义方法 selectZhangWu()
     * 显示查询的方式 1 所有查询   2 条件查询
     * 接收用户的选择
     */
    private void selectZhangWu() {
        System.out.println("1. 查询所有    2. 条件查询");
        Scanner sc = new Scanner(System.in);
        int selectChooser = sc.nextInt();
        //判断根据用户的选择,调用不同的功能
        switch(selectChooser){
            case 1:
                //选择的查询所有,调用查询所有的方法
                selectAll();
                break;
            case 2:
                //选的条件查询,调用带有查询条件的方法
                select();
                break;
        }
    }
    /*
     * 定义方法,查询数据库,带有条件去查询账务表
     * 由业务层调用,查询结果集存储到Bean对象,存储到List集合
     * 调用者传递2个日期字符串
     */
    private void select() {
        System.out.println("选择条件查询,输入日期格式XXXX-XX-XX");
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入开始日期：");
        String startDate=sc.nextLine();
        System.out.println("请输入结束日期：");
        String endDate=sc.nextLine();
        List<ZhangWu> list=zhangWuController.select(startDate,endDate);
        if(list.size()!=0)
            print(list);
    }

    private void selectAll() {
        //调用控制层中的方法,查询所有的账务数据
        List<ZhangWu> list=zhangWuController.selectAll();
        if(list.size()!=0)
            print(list);
        else
            System.out.println("没有查询到数据");
    }

    private void print(List<ZhangWu> list) {
        System.out.println("ID\t\t类别\t\t账户\t\t金额\t\t时间\t\t说明");
        for (ZhangWu zw : list) {
            System.out.println(zw.getZwid() + "\t\t" + zw.getFlname() + "\t\t" + zw.getZhanghu() + "\t\t" + zw.getMoney() + "\t\t" + zw.getCreatetime() + "\t\t" + zw.getDescription());
        }
    }
    /*
     * 定义方法，实现账务删除
     * 实现思想：
     * 	接收用户的输入，输入一个主键数据
     *  调用控制层方法，传递一个主键
     */
    private void deleteZhangWu() {
        selectAll();
        System.out.println("选择的是删除功能，请输入序号即可");
        int zwid = new Scanner(System.in).nextInt();
        //调用控制层方法，传递主键id即可
        zhangWuController.deleteZhangWu(zwid);
        System.out.println("删除账务成功");
    }
    /*
     * 定义方法，实现对账务的编辑功能
     * 实现思想：
     * 	接收用户的输入的信息
     *  封装成ZhangWu对象
     *  调用控制层的方法，传递ZhangWu对象，实现编辑
     *
     */
    private void editZhangWu() {
        selectAll();
        System.out.println("选择的是编辑功能，请输入数据");
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入ID");
        int zwid = sc.nextInt();
        System.out.println("输入分类名称");
        String flname = sc.next();
        System.out.println("输入金额");
        double money = sc.nextDouble();
        System.out.println("输入账户");
        String zhanghu = sc.next();
        System.out.println("输入日期：格式XXXX-XX-xx");
        String createtime = sc.next();
        System.out.println("输入具体描述");
        String description = sc.next();
        //将用户输入的数据，封装到ZhangWu对象中
        //用户输入的ID，必须封装到到对象中
        ZhangWu zw=new ZhangWu(zwid,flname,money,zhanghu,createtime,description);
        zhangWuController.editZhangWu(zw);
        System.out.println("账务编辑成功");
    }
    /*
     * 定义方法addZhangWu
     * 添加账务的方法，用户在界面中选择菜单1的时候调用、
     * 实现思想：
     * 	  接收键盘输入，5项输入，调用controller层方法
     */
    private void addZhangWu() {
        System.out.println("选择的添加账务功能，请输入以下内容：");
        Scanner sc=new Scanner(System.in);
        System.out.println("输入分类名称：");
        String flname=sc.next();
        System.out.println("输入金额");
        double money = sc.nextDouble();
        System.out.println("输入账户");
        String zhanghu = sc.next();
        System.out.println("输入日期：格式XXXX-XX-xx");
        String createtime = sc.next();
        System.out.println("输入具体描述");
        String description = sc.next();
        //将接收到的数据，调用controller层的方法，传递参数，实现数据添加
        //将用户输入的所有参数，封装成ZhangWu对象
        ZhangWu zw=new ZhangWu(0,flname,money,zhanghu,createtime,description);
        zhangWuController.addZhangWu(zw);
        System.out.println("添加成功");
    }
}
